package net.esj.basic.dao.jdbc.jpa;

import java.io.Serializable;
import java.sql.Connection;

import org.hibernate.Transaction;
/**
 * 有点类似hibernate的Session。
 *
 */
public interface Session {
	SessionFactory getSessionFactory();
	
	void setSessionFactory(SessionFactory database);
	
	Connection getConnection();
	void setConnection(Connection connection);
	void close();
	
	Transaction beginTransaction();
	Transaction getTransaction();

	/**
	 * 创建一个Query对象。
	 * 看Query的接口定义可知，Query可以查询也可以修改以及删除等。
	 * @param sql
	 * @return
	 */
	Query createQuery(String sql);
	
	//根据主键或唯一标识获取一个实体，现在虽然定义为Object
	Object get(Class entityClass,Serializable pk);
	Object findByUnique(Class entityClass,String proName,Object v);
	
	/**
	 * 保存。
	 * @param entity
	 * @return
	 */
	Object merge(Object entity);
	Object insert(Object entity);
	Object update(Object entity);
	
	//根据主键
	int delete(Class entityClass, Serializable pk);
	////根据唯一标识删除，其实代码实现是也没要求是具有唯一性的字段
	int deleteByUnique(Class entityClass, String colName, Object v);
	//删除实体
	int delete(Class entityClass, Object entity);
}
